package cn.myzqu.sign.project.server.utils;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author: 的川
 * @Date: 2019/1/23 13:44
 */
public class StringUtil {

    /**
     * 将yyyy-MM-dd HH:mm:ss格式字符串转为时间
     * @param strDate
     * @return
     */
    public static Date strToDateLong(String strDate) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        ParsePosition pos = new ParsePosition(0);
        Date strtodate = formatter.parse(strDate, pos);
        return strtodate;
    }

    /**
     * 将Date转换为格式为yyyy-MM-dd HH:mm:ss字符串
     * @param date
     * @return
     */
    public static String dateToStrLong(Date date) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(date);
        return dateString;
    }

    /**
     * 判断字符串不为空
     * @param str
     * @return
     */
    public static boolean checkStr(String str) {
        boolean bool = true;
        if (str == null || "".equals(str.trim())){
            bool = false;
        }
        return bool;
    }

    /**
     * 判断对象不为空
     * @param obj
     * @return
     */
    public static boolean checkObj(Object obj) {
        boolean bool = true;
        if (obj == null || "".equals(obj.toString().trim())){
            bool = false;
        }
        return bool;
    }

    /**
     * 字符串编码从ISO8859_1转成GBK
     * @param str
     * @return
     */
    public static String getISOToGBK(String str) {
        String strName = "";
        try {
            if (str != null) {
                strName = new String(str.getBytes("ISO8859_1"), "GBK");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strName;
    }

    /**
     * 字符串编码从ISO8859_1转成UTF8
     * @param str
     * @return
     */
    public static String getISOToUTF8(String str) {
        String strName = "";
        try {
            if (str != null) {
                strName = new String(str.getBytes("ISO8859_1"), "UTF8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return strName;
    }

    /**
     * 判断字符串是否中文
     * @param str
     * @return
     */
    public static boolean isChinese(String str) {
        String regEx = "[\\u4e00-\\u9fa5]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.find();
    }

    /**
     * 判断一个字符串是不是数字;
     * 必须以-、+、数字或.号为开头，允许以数字或小数点结尾，但不能是null,空字符或仅仅只是.号 ;
     * 总之就是Double.parseDouble转换不报异常即可;
     * 如 -1.；.1；1.；-.123；1.1；-12.12； 都会返回true 。
     *    .1.；1 123；1-123；..1；1..；..；.； 都会返回false。
     * @param str 字符串
     * @return 是数值返回true,否则false
     */
    public static boolean isNum(String str) {
        boolean flg = false;

        if(str!=null && (str = str.trim()).length() >0){
            String dbl = "((^(\\-|\\+)?([0-9]+)?(\\.)?)([0-9]+$))|((^(\\-|\\+)?([0-9]+)?)[0-9]+([0-9\\.]$))";
            flg = Pattern.compile(dbl).matcher(str).matches();
        }

        return flg;
    }

    /**
     * 判断一个字符串是不是整数
     * @param str 字符串
     * @return 是数值返回true,否则false
     */
    public static boolean isInteger(String str){
        str = str.trim();
        String integer = "[\\-\\+]?[0-9]+$";
        boolean flg = Pattern.compile(integer).matcher(str).matches();
        return flg;
    }

    /**
     * 字符串首字母大写
     * @param str
     * @return
     */
    public static String toFirstUpperCase(String str) {
        if (str == null || "".equals(str.trim())){
            return "";
        }
        String firstChar = str.substring(0, 1).toUpperCase();
        String lastStr = str.substring(1);
        return firstChar + lastStr;
    }

}
